# 顺序结构 : 按照代码行的次序从前到后执行的次序(默认)
# 分支结构 : 按照一定的条件进行选择执行代码次序
# 循环结构 : 按照条件重复执行某段代码次序的过程
# 2.分支结构🏴
# 2.1 if判断
# 格式
# 注意事项
# if 和判断条件之间有空格
# 在判断条件的末尾加冒号
# 满足条件的必须缩进(4个空格)相当于一个Tab键字符进行执行对应操作
# 定义变量
age = 20
# 判断：有个表达式结果是布尔值
# 条件：age >= 18
if age >= 18:
    print("允许进网吧happy~")
# 思考：下面这句话什么时候执行
print("猜猜我啥时候执行？")
# 结论：
# if条件成立执行内部代码，否则不执行if内部代码，默认按照代码顺序向下执行


# 2.2 if 和else判断
# 格式:
# 注意事项
# else后面直接写冒号,不加任何条件,else和if位置必须对齐
# else下方需要缩进,同时缩进的代码表示不满足条件执行的操作
# 输入用户年龄
age = int(input("请输入用户年龄："))
# 判断年龄：条件是否18
if age >= 18:
    print("允许进网吧happy~")
else:
    print("回家写作业吧~")
    # 结论：
    # if 和 else 成对出现时需要对齐，else不能单独使用
    # if 后面有条件 else 后面直接冒号，if 和 else 内部代码必须有缩进


# 2.3 逻辑运算符条件
# 1.定义整数变量
age = 18
# 2.判断年龄是否正确(0~120)
if 0 < age < 120:
    if age > 0 and age < 120:
        print("年龄正确")


 # 1.定义变量
python_score = 80
c_score = 30
# 2.判断成绩
if python_score > 60 or c_score > 60:
    print("成绩合格")

# 定义变量(True表示本公司员工)
# 定义变量
employer = False
if not employer:
    if not (employer is False):
        print("公司员工")
    else:
        print("不是公司员工")

#
# 2.4 elif的多重判断
# 注意事项
# elif 和else一样不能单独使用
# 多重条件的判断elif和else一样和if对齐
# 每一种子条件是一种独立的判断,子条件对应代码缩进4个空格
# elif 后面需要写条件,并且条件末尾加冒号
# 定义分数变量
score = int(input("请输入分数："))
# 判断分数
if score >= 90:
    print("优")
elif 80 <= score < 90:
    print("良")
elif 70 <= score < 80:
    print("中")
elif 60 <= score < 70:
    print("差")
# 上述条件都不满足时执行else
else:
    print("不及格")


# 2.5 if的嵌套
# 定义变量
has_ticket = input("请确认是否有票：")
if has_ticket:
    knife_length = int(input("请输入刀的长度："))
    if knife_length >=20:
        print("不允许上车")
    else:
        print("安检通过，允许上车")
else:
    print("不允许进门")
# 写代码的核心：编程思想 ‐‐> 理解需求 ‐‐> 提炼转换语句（逻辑）
# 思考：如果变量的值需要变化，怎么处理？
# ①input函数输入的任意字符都会当做字符串
# ②在python中任意非空或非0数据就是真值


# 3. 循环结构🏴
# 3.1 while循环
# 道歉100次，内容:"媳妇,对不起我错了!"
# 1.定义计数器
num = 1
# 2.设置循环条件
while num <= 10:
    print("媳妇,对不起我错了!")
    num += 1
# 总结：
# 1. while后台跟条件，结果是布尔值（True/False）,当为True时循环才能执行
# 2. 循环体代码必须缩进（tab），记得修改计数器（忘了后果很严重：进入死循环）

# while死循环
# 1.定义计数器
num = 1
# 定义初始结果变量
result = 0
# 2.设置while循环条件
while num <= 100:
# 3.编写循环代码
    result = result + num
# 4.修改计数器
    num += 1
# 查看计算结果
print(f"求和的结果为：{result}")


# 3.2 while循环中的break
# 案例： 一共吃5个苹果， 吃完第一个， 吃第二个...， 这里"吃苹果"是重复动作
# 情况一： 如果吃的过程中， 吃完第三个吃饱了， 则不需要再吃第4个和第五个苹果， 即是吃苹果的动作停止(不再吃苹果)
# 1.定义计数器
num = 1
# 2.设置while循环
while num <= 5:
# 3.编写循环代码
    print(f"吃了第{num}个苹果")
# 判断是否吃饱？
    if num == 3:
        print("吃饱了，后面的不吃了")
        break
    num += 1

# 3.3 for循环
# 需求：遍历字符串"itheima"，遇到字母e退出循环
# 1.定义字符串变量
info = "itheima"
# 2.遍历取出每个元素（字符）
for i in info:
# 条件判断
    if i == "e":
        break
# 打印取出的结果
print(i)
# 注意
# for 循环主要用于容器内元素的遍历（遍历完成后自动结束），没有计数器的概念
# 临时变量随便定义，没有初始值，习惯用字母i
# break作用和while循环中的作用一样


# 3.4 range函数🏴
# 语法格式： range(a,b[,step])
# 相当于范围数据：a<=x<b
# a表示起始值，b表示末尾值
# step表示步长
# [] 表示可选
# 注意事项：
# 取值范围遵循“顾头不顾尾”，即包含起始值，但是不包含末尾值
# 如果起始值为0，可以省略不写，只写末尾值
# 默认步长可以不写，默认按照1递增
# 道歉10次，内容:"媳妇,对不起我错了!"
# for循环实现
# 容器：计数10次
for i in range(1,11):
    print("baby,对不起我错了!")

# 3.需求for循环：计算0~100之间所有整数的累加和
# 定义接收结果变量
result = 0
for i in range(1,101):
    result += i
print(f"结果：{result}")

# 4.通过for循环：计算0~100之间所有偶数的累计和
# 方式1
result = 0
for i in range(0, 101, 2):
    result += i
print(result)
# 方式2
result = 0
for i in range(101):
    if i % 2 == 0:
        result += i
    print(result)
# 范围函数：在for循环中可以记录循环次数，还可以参与计算


# 3.5 while和for应用比对
# while 循环常常用于范围不确定的场景(确定范围的也可以用)
# for循环常常用于范围比较确定的场景(容器能够计算)
# 需求：
# 1．提示用户输入登录系统的用户名和密码
# 2.校验用户名和密码是否正确（正确的用户名：admin、密码：123456）
# 3.如果用户名和密码都正确，打印“登录成功！”，并结束程序
# 4.如果用户名或密码错误，打印“用户名或密码错误！“，提示用户继续输入用户名和密码登录
# 5.如果用户输入的用户名为“exit”，则退出程序
# 定义计数器
num = 1
while True:
    username = input("请输入用户名：")
    if username == "exit":
        break
    password = input("请输入密码：")
    if username == "admin" and password == "123456":
        print("登录成功！")
        break
    else:
        print("用户名或密码错误！")
    pass
# 总结：
# 1.先按照题目要把主干代码完成
# 2.思考多次模拟登录的方式需要用到循环，而且是死循环
# 3.所有的模拟操作都需要放在死循环里面，同时需要注意判断的先后次序